/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package modelo;

import java.sql.SQLException;
import java.util.ArrayList;
import util.Constante;

/**
 *
 * @author gabrielbmoro
 */
public class Orientador extends Professor {

    private Aluno aluno;
    private Tcc tcc;
    private Defesa defesa;

    public boolean aceitarSolicitacao(String nomeAluno) {
        this.aluno = new Aluno();
        this.tcc = new Tcc();
        int idAluno = this.aluno.recuperaIdAlunoPorNome(nomeAluno);
        if (idAluno != 0) {
            int idTcc = this.aluno.recuperaIdTcc(idAluno);
            if (idTcc != 0) {
                try {
                    String sql = "update tcc set solicitacaoDeOrientacao=? where idTcc=" + idTcc + ";";
                    super.conecta = ConectaBD.getInstance();
                    super.preparedStatement = super.conecta.getConnection().prepareStatement(sql);
                    super.preparedStatement.setInt(1, Constante.STATUS_APROVADO);
                    super.preparedStatement.execute();
                    super.preparedStatement.close();
                    return true;
                } catch (SQLException ex) {
                    ex.printStackTrace();
                } finally {
                    super.conecta.encerrarConexao();
                }
            }
        }
        return false;
    }

    public boolean rejeitarSolicitacao(String nomeAluno) {
        this.aluno = new Aluno();
        this.tcc = new Tcc();
        int idAluno = this.aluno.recuperaIdAlunoPorNome(nomeAluno);
        if (idAluno != 0) {
            int idTcc = this.aluno.recuperaIdTcc(idAluno);
            if (idTcc != 0) {
                try {
                    String sql = "update tcc set solicitacaoDeOrientacao=? where idTcc=" + idTcc + ";";
                    super.conecta = ConectaBD.getInstance();
                    super.preparedStatement = super.conecta.getConnection().prepareStatement(sql);
                    super.preparedStatement.setInt(1, Constante.STATUS_REPROVADO);
                    super.preparedStatement.execute();
                    super.preparedStatement.close();
                    return true;
                } catch (SQLException ex) {
                    ex.printStackTrace();
                } finally {
                    super.conecta.encerrarConexao();
                }
            }
        }
        return false;
    }

    public ArrayList<String> restaurarTrabalhosSolicitadosParaOrientacao(int idProfessor) {
        try {
            String sql = "select idtcc,tema from tcc where orientador_professor= " + idProfessor + " and solicitacaoDeOrientacao =" + Constante.STATUS_AGUARDANDO;
            ArrayList<String> list = new ArrayList<>();
            this.aluno = new Aluno();

            super.conecta = ConectaBD.getInstance();
            super.statement = super.conecta.getConnection().createStatement();
            super.resultSet = super.statement.executeQuery(sql);

            while (super.resultSet.next()) {
                int idAluno = this.aluno.recuperaIdAlunoPorTcc(super.resultSet.getInt(1));
                ArrayList<String> perfil = this.aluno.acessarPerfil(idAluno);
                String nomeAluno = perfil.get(0);
                list.add(nomeAluno);
                list.add(super.resultSet.getString(2));
            }
            return list;
        } catch (SQLException ex) {

        } finally {

        }
        return null;
    }

    public ArrayList<Aluno> recuperaAlunosOrientados(int idOrientador) {
            this.tcc = new Tcc();
            ArrayList<Integer> idsAlunos = new ArrayList<>();
            this.aluno = new Aluno();
            ArrayList<Aluno> listRetorno = new ArrayList<>();

            ArrayList<Integer> list = this.tcc.recuperaIdsTccs(idOrientador);
            if (list != null) {
                for (int count = 0; count < list.size(); count++) {
                    idsAlunos.add(this.aluno.recuperaIdAlunoPorTcc((list.get(count))));
                }
                if(idsAlunos.size()!=0){
                    for(int count2=0;count2<idsAlunos.size();count2++){
                        ArrayList<String> perfil= this.aluno.acessarPerfil(idsAlunos.get(count2));
                        String nome= perfil.get(0);
                        String email= perfil.get(1);
                        
                        listRetorno.add(new Aluno(nome,email));
                    }
                }
                return listRetorno;
            }else{
                return null;
            }
        }
    
    public boolean agendarDefesa(String nomeAluno, String data, String horario, String local){
        this.defesa= new Defesa(new Aluno(nomeAluno), horario, data, local);
        return this.defesa.registrarDefesa();
    }
}
